package leetCode;

/**
 * 66 加一
 * 数组
 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
 你可以假设除了整数 0 之外，这个整数不会以零开头。

 示例=1：
 输入：digits = [1,2,3]
 输出：[1,2,4]
 解释：输入数组表示数字 123。

 示例2：
 输入：digits = [4,3,2,1]
 输出：[4,3,2,2]
 解释：输入数组表示数字 4321。

 示例 3：
 输入：digits = [0]
 输出：[1]

 提示：
 1 <= digits.length <= 100
 0 <= digits[i] <= 9
 */
public class PlusOne {
    public static void main(String[] args) {

    }

    //有点暴力，特殊讨论了全是9的情况，而且初始化数组后默认就都是0，没必要for循环给每一位赋0，100/82
    public int[] plusOneMe(int[] digits) {
        int index = digits.length-1;
        while (digits[index] + 1 == 10) {
            digits[index] = 0;
            index--;
            if (index == -1) {
                int[] ints = new int[digits.length + 1];
                ints[0] = 1;
//                for (int i = 1;i<ints.length;i++) {
//                    ints[i] = 0;
//                }
                return ints;
            }
        }
        digits[index]++;
        return digits;
    }

    //两个思路，我的是判断9的情况，都跑完再返回，这个是判断当不是9的情况，直接返回
    public int[] plusOne(int[] digits) {
        int len = digits.length;
        for (int i = len - 1; i >= 0; i--) {
            digits[i] = (digits[i] + 1) % 10;
            if (digits[i] != 0) {
                return digits;
            }
        }
        digits = new int[len + 1];
        digits[0] = 1;
        return digits;
    }
}
